import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

// 导入
import { saveToken, getToken, removeToken } from '@/utils/token'
// 导入接口
import { userInfoAPI } from '@/api/user'
// 导入router
import router from '@/router'
import { Toast } from 'vant'

export default new Vuex.Store({
  state: {
    // 用一个对象保存token以及refresh_token
    tokenObj: getToken() || {},

    // 保存用户信息
    userInfo: {}
  },
  mutations: {

    // 参数1：固定的state
    // 参数2：传递过来的数据
    setToken (state, obj) {
      // 保存到state
      state.tokenObj = obj
      // 保存到localStorage
      saveToken(obj)
    },

    // 专门用来修改userInfo的方法
    changeUserInfo (state, obj) {
      state.userInfo = obj
    },

    // 专门封装一个做退出的方法
    logout (state) {
      // 清空vuex里的token
      state.tokenObj = {}
      // 删除本地存储的token
      removeToken()
      // 还要删掉个人信息
      state.userInfo = {}
      Toast('退出成功')
      // 跳转到登录页
      router.push('/login')
    }
  },

  actions: {

    async reqUserInfo (ctx) {

      // 如果userInfo里没有数据才发请求
      if (!ctx.state.userInfo.name) {
        // 发请求获取用户信息，这个请求要携带token
        const res = await userInfoAPI()
        ctx.commit('changeUserInfo', res.data)
      }
    }
  }
})
